package com.cnap.db.mapper;

import com.cnap.db.entity.ApplicationPO;
import com.cnap.model.application.QueryApplicationParam;
import com.cnap.model.application.UpdateApplicationParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 通用mapper
 *
 * @author xc
 **/
@Mapper
@Component
public interface ApplicationMapper {


    /**
     * 条件查询
     *
     * @param queryApplicationParam 条件
     * @return 结果
     */
    List<ApplicationPO> selectApplicationByParam(@Param("queryParam") QueryApplicationParam queryApplicationParam);

    /**
     * 条件查询(带userName)
     *
     * @param queryApplicationParam 条件
     * @param userName              userName
     * @return 结果
     */
    List<ApplicationPO> selectApplicationByParamWhitUser(@Param("queryParam") QueryApplicationParam queryApplicationParam, @Param("userName") String userName);

    /**
     * 条件查询待分解应用（未分解，已分解但未完全部署的应用，状态对应未1,2）
     *
     * @param queryApplicationParam 条件
     * @return 结果
     */
    List<ApplicationPO> selectByParamForSplit(@Param("queryParam") QueryApplicationParam queryApplicationParam, @Param(
            "userName") String userName);

    /**
     * 根据应用名称和版本查询（带userName）
     *
     * @param name     应用名称
     * @param version  版本
     * @param userName 用户名
     * @return 结果
     */
    List<ApplicationPO> selectApplicationByNameAndVersionWithUser(@Param("name") String name,
                                                                  @Param("version") String version,
                                                                  @Param("userName") String userName);

    /**
     * 新增应用信息
     *
     * @param applicationPO 应用信息
     * @return 结果
     */
    int insertApplication(@Param("application") ApplicationPO applicationPO);

    /**
     * 更新应用信息
     *
     * @param updateApplicationParam 参数
     * @return 结果
     */
    int updateApplication(@Param("updateParam") UpdateApplicationParam updateApplicationParam);

    /**
     * 根据id查询
     *
     * @param id id
     * @return 应用
     */
    ApplicationPO selectById(@Param("id") String id);

    /**
     * 根据应用id删除信息
     *
     * @param applicationId 应用id
     * @return 结果
     */
    int deleteApplicationById(@Param("id") String applicationId);

    /**
     * 根据id更新应用状态
     *
     * @param applicationId 应用id
     * @param status        状态 0：初始，1：页面显示
     * @return 结果
     */
    int updateApplicationStatusById(@Param("id") String applicationId, @Param("status") int status);

}
